#include"mystdio.h"
 myFILE* my_fopen(const char*path,const char *flag)
{
    int flag1=0;
    int  iscreate=0;
    mode_t mode=0666;
    if(strcmp(flag,"r")==0)
    {
        flag1=(O_RDONLY);
    }
    else if(strcmp(flag,"w")==0)
    {
        flag1=(O_WRONLY|O_CREAT|O_TRUNC);
        iscreate=1;
    }
    else if(strcmp(flag,"a")==0)
    {
        flag1=(O_WRONLY|O_CREAT|O_APPEND);
        iscreate=1;
    }
    else{}
    int fd=0;
    if(iscreate)
        fd=open(path,flag1,mode);
    else
        fd=open(path,flag1);
    if(fd<0)return NULL;
    myFILE *fp=(myFILE*)malloc(sizeof(myFILE));
    if(!fp)return NULL;
    fp->fileno=fd;
    fp->flags=FLUSH_LINE;
    fp->cap=LINE_SIZE;
    fp->pos=0;
    return fp;

}
 void my_fflush(myFILE * fp)
{
    write(fp->fileno,fp->cache,fp->pos);
    fp->pos=0;
}
 ssize_t my_fwrite(myFILE *fp,const char*data, int len)
{
    memcpy(fp->cache+fp->pos,data,len);
    fp->pos+=len;
    if(fp->flags&FLUSH_LINE&&fp->cache[fp->pos-1]=='\n')//这里前面的&就决定了flags只可以是2的倍数否者会错误
    {
        my_fflush(fp);
    }
    return len;
}
 void my_fclose(myFILE *fp)
{
    my_fflush(fp);
    close(fp->fileno);
    free(fp);
}
